from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup
import pandas

newarr = []
browser = webdriver.Chrome(r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver")
wait = WebDriverWait(browser, 10)
def search():
    try:
        browser.get('http://so.bbs.xiaomi.cn/')
        input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "body > div.wrap > div.main > div > div > div > input")))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.wrap > div.main > div > div > div > button")))
        input.send_keys("小米6")
        submit.click()
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#searchPaging > ul > li.next > a")))
    except TimeoutException:
        return search()

def get_tiezi():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "body > div.wrap > div.main > div:nth-child(1) > div > div.search_list")))
    html = browser.page_source
    soup = BeautifulSoup(html, 'html.parser').find(class_='search_list')
    for item in soup.find_all('dl'):
        test = item.find(class_='info').text.split()
        if len(test) < 6:
            test.insert(0, 'none')
        pd = {
              'title': item.select('dt')[0].text,
              'name': test[1],
              'content': item.select('p')[0].text,
              'time': test[2]+' '+test[3],
              'browser': test[4][3:],
              'response': test[5][3:]
              }
        newarr.append(pd)
    newarrdf = pandas.DataFrame(newarr, columns=['title', 'name', 'content', 'time', 'browser', 'response'])
    print(newarrdf)
    return newarrdf

def main():
    search()
    get_tiezi()
    for i in range(2, 100):
        url = 'http://so.bbs.xiaomi.cn/?q=小米6&p='+str(i)
        browser.get(url)
        get_tiezi()
        all_content = get_tiezi()
        all_content.to_excel('xiaomi6.xlsx')

if __name__ == '__main__':
    main()


'''
遇到问题：
1、保存问题，一开始在main函数里把保存到excel表写到了循环外面，结果要等100页循环完才能保存到excel表
2、遇到了需要的数据全部在一个标签里面，每个数据用&nbsp;&nbsp;（表示两个空格）隔开，就像下面这样，后来想到用strip函数用空格隔开，将其之前解析得到的整个字符串变成了列表，
   之后想取哪个数据直接索引就行
														&nbsp;&nbsp;
														2017-04-11 14:11														&nbsp;&nbsp;
														查看：957662														&nbsp;&nbsp;
														回复：3764													
3、在问题2的基础上，爬取的网页发现列表的第一个数据有时候没有，所以就加了个判断条件，小于齐全数据列表的长度就用insert函数在第一个位置加个元素。
'''
